﻿#define  _CRT_SECURE_NO_WARNINGS   1
#include <iostream>
using namespace std;
//有call指令--->调用，函数不被展开，需要建立栈帧。没有call指令---->不调用，函数被展开。


//inline
//1,被inline修饰的函数称为内联函数
//2，被inline修饰的函，最后是否被展开，取决于编译器，当超过一定的行数，编译器就不会展开了
//3，inline声明和定义的时候，不能分离到两个文件中，必须在同一个文件中


//展开
//展开虽然不需要建立栈帧，能提高运行的效率，但它不可以进行调试

//inline int add()				//超过一定的行数，就不会被展开了
//{
//	int num = 20;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	num += 1;
//	return num;
//}
//
//int main()
//{
//	add();
//	return 0;
//}

//类定义
//1，定义在类里面的函数默认为inline内联函数，但是否被展开，最终还是取决于编译器
//2，我们会把成员变量和成员函数都放在类里面，为了使对象健全
//class Date
//{
//public :		//公开的----》外部可以使用
//	void Init(int year, int month, int day)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//	// 为了区分成员变量，⼀般习惯上成员变量
//	// 会加⼀个特殊标识，如_ 或者 m开头
//private:		//私有的-----》外部无法使用，只限内部使用
//	int _year;// year_ m_year
//	int _month;
//	int _day;
//};

//当定义和声明分离的时候，只能用类明：：去访问
//class wwp
//{
//	void add(int x,int y);
//	int a;
//	int b;
//};

//在C++中，struct可以继续当成结构体使用，也可以当成类使用。
// struct当成类使用的时候，本质上就是对其的升级。
//class 在不写访问限定符的时候，是默认为私有的。struct在不写访问限定符的时候，是默认公开的

class wwp
{
public:
	int add(int x,int y)
	{
		return x + y;
	}
//private:
	int* arr;
	int size;
	int capacity;
};

//声明和定义的唯一区别——》是否创建空间。声明不创建空间，定义才创建空间，有了空间我们才能进行访问
int main()
{
	//wwp.size;
	wwp d1;		//类的实例化对象---》创建对象
	/*d1.add(1, 2);
	d1.arr;*/

	cout << sizeof(d1) << endl;		//计算对象的大小时候，不包含成员函数的大小，只计算成员变量的大小
	cout << sizeof(wwp) << endl;
	return 0;
}